iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0

深度網路神經(Deep Neural Networks)

簡稱 DNN深度學習一種人工神經網路模型
多層感知器(Multilayer Perceptron)組成
多層感知器是一種人工神經網路,
輸入層
隱藏層
輸出層 組成

輸入層 接收資料
輸出層 輸出結果
隱藏層 從資料中學習模式

工作原理

  1. 將資料輸入到輸入層
  2. 輸入層將資料傳遞到隱藏層
  3. 隱藏層對資料進行處理,並將結果傳遞到輸出層
  4. 輸出層輸出結果
  5. 在隱藏層中,每個神經元都會對輸入資料進行一定計算,並將結果傳遞到下一個神經元
    https://ithelp.ithome.com.tw/upload/images/20240804/20163257UDF3U10oUQ.png
    圖片來源:(https://www.researchgate.net/figure/A-typical-architecture-of-DNN_fig2_335845675)

DNN應用

影像辨識 識別圖像中的物件
自然語言處理 理解自然語言、機器翻譯、語音辨識、文字分析
語音辨識 將語音轉換為文字
機器翻譯 將一種語言翻譯成另一種語言
推薦系統 向用戶推薦喜歡商品或服務

DNN優缺點

優點 資料學習複雜模式,解決傳統機器學習模型無法解決問題
缺點 需要大量資料進行訓練,訓練過程可能很耗時,可能存在過擬合(Overfitting)問題

DNN演算法

利用 反向傳播演算法 訓練DNN,是一種梯度下降法,計算損失函數DNN權重梯度,使用梯度來更新權重,減少損失函數值

DNN工作流程

  • 前向傳播:將輸入資料饋送到DNN中,計算每個神經元的輸出值
  • 計算損失:計算損失函數值
  • 反向傳播:從輸出層開始,逐層反向傳播,計算每個神經元的輸出值相對於其輸入值梯度
  • 更新權重:使用梯度更新DNN權重

DNN公式

  • 前向傳播

a_l = σ(w_l * a_{l-1} + b_l)

  • 計算損失

L = loss(a_L, y)

  • 反向傳播

δ_L = ∂L/∂a_L

δ_l = ∂L/∂a_l = w_{l+1}^T * δ_{l+1} * σ'(z_l)

  • 更新權重

w_l = w_l - α * δ_l * a_{l-1}^T

b_l = b_l - α * δ_l

a_l 第l層神經元輸出值
σ 激活函數
w_l 第l層神經元權重
b_l 第l層神經元偏置
L 損失函數
y 目標值
δ_l 第l層神經元誤差
α 學習率

DNN程式碼(反向傳播演算法)

import numpy as np

# 輸入資料

x = np.array([[1, 2], [3, 4]])

# 目標值

y = np.array([[0, 1], [1, 0]])

# DNN

class DNN:

    def __init__(self, n_features, n_hidden, n_outputs):
        self.w1 = np.random.randn(n_features, n_hidden)
        self.b1 = np.zeros(n_hidden)
        self.w2 = np.random.randn(n_hidden, n_outputs)
        self.b2 = np.zeros(n_outputs)

    def forward(self, x):
        a1 = np.dot(x, self.w1) + self.b1
        z1 = np.tanh(a1)
        a2 = np.dot(z1, self.w2) + self.b2
        z2 = np.sigmoid(a2)
        return z2

    def loss(self, y_pred, y_true):
        return -np.sum(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))

    def backward(self, y_pred, y_true):
        delta2 = y_pred - y_true
        delta1 = np.dot(delta2, self.w2.T) * (1 - z1**2)
        grad_w2 = np.dot(z1.T, delta2)
        grad_b2 = delta2
        grad_w1 = np.dot(x.T, delta1)
        grad_b1 = delta1
        return grad_w1, grad_b1, grad_w2, grad_b2

# 訓練

model = DNN(2, 4, 2)

for epoch in range(1000):
    y_pred = model.forward(x)
    loss = model.loss(y_pred, y)
    grad_w1, grad_b1, grad_w2, grad_b2 = model.backward(y_pred, y)
    model.w1 -= 0.01 * grad_w1
    model.b1 -= 0.01 * grad_b1
    model.w2 -= 0.01 * grad

資料來源:深度學習
DNN(深度神經網路)的全面認識


上一篇
Day3-深度學習
下一篇
Day5-CNN
系列文
Let's Go To The AI Party!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言